草庐IT

Java String创建和String常量池

全部标签

java - 枚举中的常量表达式

有什么方法可以将枚举转换为常量表达式吗?我希望我的switch运算符在枚举的值中进行选择,但是我得到一个编译错误“case表达式必须是常量表达式”,所以我尝试在变量中声明它:finalintREG=MyEnum.REG.getIndex().intValue();switch(service.getIndex()){caseREG:但我仍然得到同样的错误。根据Oracle的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28Acompile-timeconstantexpressionisane

java - String.hashCode() 效率低下吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion查看sourcecodeofjava.lang.Stringofopenjdk-1.6时,我看到String.hashCode()使用31作为质数并计算s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]现在我看这个的原因是我想到的问题是比较String.equals中的hashCodes是否会使String.equals明显更快。但是现在看hashCode,我想到

java - 如何理解是否创建了一个新的String对象

我对编译3行程序时得到的答案和结果感到困惑。这是代码及其操作码:http://pastebin.com/B1xxAjcp如果我没有完全错的话,很明显Strings="abcd";Strings1=newString("efgh");s.concat("ijkl");这些行对应于这些操作码:1:istore_12:ldc#2//Stringabcd4:astore_25:new#3//classjava/lang/String8:dup9:ldc#4//Stringefgh11:invokespecial#5//Methodjava/lang/String."":(Ljava/lang/

java - 何时返回 Iterable<String> 而不是 List、Set、Collection?

所以我一直在相当广泛地使用Neo4jAPI,我注意到它们几乎总是有返回Iterable而我一直认为最好返回Set、List或Collection之一,除非有令人信服的理由不这样做。设置为向用户表明它永远不会有重复的元素,当顺序很重要或包含重复元素时为List,或者当您没有策略时为Collection。与Iterable相比,我更喜欢它们,因为它们具有有用的实用程序,如.contains()、.add()等。我发现我经常需要编写代码将Iterable转换为Collection。所以我的问题是:我是否遗漏了一些重要的东西?使用Iterable而不是Collection是否有合理的理由?你什

java - 如何使用 ASM 控制常量池条目的顺序?

我正在实现一个转换,从.class文件中删除未使用的元素以减小它们的大小。因为一些常量池条目将变得未使用,所以我让ASM重新计算常量池,而不是从输入中复制它。但是,转换后的.class文件有时比原始文件大,因为ASM的常量池排序需要使用ldc_w指令(具有2字节索引),其中输入.class文件使用ldc(带有1字节索引)。我想手动对常量池进行排序,使ldc引用的常量排在第一位。人们可能还出于其他原因想要对常量池进行排序:例如,通过将常量池按规范顺序放置来使一组.class文件更可压缩,测试使用.class文件的工具,使用顺序作为软件水印,或混淆实现不当的反编译器/反混淆器。我grep了

java - 在 Java 中将 long 转换为 String 的有效方法

我一直在用longa=123456789;Stringb=a+"";将long值(或int)转换为String,或者从这个角度来看,将其视为String。我的问题是,这样做可以吗?有什么负面影响吗?使用String.valueOf()与Long.toString()有什么区别吗?谢谢 最佳答案 这样做是可以的,因为最近的JVM可能会将其减少为:Stringb=String.valueOf(a);至于负面,它不是好的Java编码风格,因为存在歧义。如果a为null,b="null"会怎样?还是会抛出NPE?您根据经验知道答案,但这对您

java - 当我们可以创建 String s = ("abc"时,需要什么 String s = new String "abc")

据我了解Strings=newString("abc")将创建两个对象-字符串常量池中的一个(如果"abc"不在常量池中)堆内存中的一个尽管对于实际将创建多少个对象以及在何处创建存在更多的理解。无论如何,我有以下问题-为什么String类的java文档中没有涉及将创建多少个对象以及在何处创建?如果字符串是不可变的,为什么要在String类中提供newString(String)?还可以假设所有字符串,由Strings="abc"创建或Strings=newString("abc"),是否会在String常量池中可用?在StringBuilder或StringBuffer中创建或追加的字

java - 字符串常量池和实习生

这几天我一直在尝试理解String常量池和inter的概念,看了很多文章后我了解了其中的一些部分,但仍然对一些事情感到困惑:-1.Stringa="abc"这会在字符串常量池中创建一个对象但是下面这行代码是否在字符串常量池中创建了对象“xyz”?Stringb=("xyz").toLowerCase()2.Stringc="qwe"Stringd=c.substring(1)d.intern()Stringe="we"是否应该在类加载期间将文字“we”添加到字符串常量池中,如果是这样,为什么即使d未指向字符串常量池,d==e也会导致true 最佳答案

java - ConcurrentHashMap 中 String intern 方法的去重

我看过JavaDays的一个代码,作者说这种有概率的方法对于存储字符串非常有效,类似于Stringintern方法publicclassCHMDeduplicator{privatefinalintprob;privatefinalMapmap;publicCHMDeduplicator(doubleprob){this.prob=(int)(Integer.MIN_VALUE+prob*(1L();}publicTdedup(Tt){if(ThreadLocalRandom.current().nextInt()>prob){returnt;}Texist=map.putIfAbse

java - jsonObject as string - 搜索正则表达式以删除密码字段

我有一个json字符串,它的内容中某处有一个像这样的字符串:"password":"password2"这可以在json字符串中的任何地方,所以不要假设它在第一层。它甚至可以在jsonArray中。所以我需要搜索整个字符串并删除这个字段,或者将它的值设置为null。所以我需要能够搜索整个字符串并替换密码。例如,字符串可能如下所示:我只是想用它来记录。我的问题是,我想删除与第三方共享的密码值。我需要在java中使用正则表达式来搜索此字符串并将密码值替换为空字符串,或者我什至可以对密码进行md5。如果不存在密码字符串,它一定不会失败。我怎样才能做到这一点?所以要清楚,给定任何输入作为字符串